#!/bin/bash
#========Header=========================================================================|
#AUTOR:
#   Jefferson Rocha <lrcjefferson@gmaill.com>
#
#HOMEPAGE:
#   https://www.emmilinux.com.br
#
#DESCRIÇÃO:
#   Correção da brecha do apt,(sources.list) que permite adicionar um rep falso
#   no sources.list.
#   Este programa deixa imutavel por padrão se existirem:
#   sources.list, crontab, cron.allow
#
#PORQUE?
#   Quando um rep é adicionado no sources.list é preciso uma chave para autenticação
#   do apt, mas isso pode ser burlado facilmente, por exemplo quando estamos rodando
#   o dpkg não podemos fazer uso do apt-key para adicionar uma nova chave no chaveiro,
#   Mas tem um jeito de burlar isto! podemos adicionar uma regra no crontab adicionando
#   algum script para manipular o mesmo e como consequencia usar o apt-key em x tempo.
#   Está é uma falha critica do APT, mesmo sendo o usuário que bota em risco a sua
#   máquina instalando pacotes de terceiros, o apt deveria se previnir e pelo menos
#   avisar que o Sources.list foi modificado, ou ser mais rigido e deixar estes
#   arquivos imutaveis.
#
#
#O QUE FIZEMOS?
#   Basicamente nomeamos o dpkg original como dpkg2 e este script toma frente,
#   assim podemos fazer uma proteção a mais.
#   a cada atualização vamos implementar mais niveis de segurança.
#
#
#CHANGELOG:
#   (Versão 0.1) Jefferson Rocha
#     -Criado programa com proteção de autenticação (md5)
#
#   (Versão 1.1) Jefferson Rocha
#     -Reescrito programa utilizando novo metodo para segurança (chattr)
#
#=======================================================================================|


#----FUNC
block(){ chattr "$@"; }


#Lista de arquivos/pastas a serem bloqueados
#Para melhor organização, deixe 3 arquivos/pastas em
#cada linha.
list=(
"/etc/apt/sources.list" "/etc/crontab" "/etc/cron.allow"
"/etc/ssh/sshd_config"
)

#Bloqueando arquivos/pastas.
for i in "${list[@]}"; do
    [ -e "$i" ] && block +i -f "$i"
done

dpkg2 "$@"  #chamada dpkg real

#Desbloqueando arquivos/pastas
for i in "${list[@]}"; do
    [ -e "$i" ] && block -i -f "$i"
done
